/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* PrintConfiguration.java
*
* Created on Apr 5, 2010, 4:31:47 PM
*/
package com.floreantpos.config.ui;
import java.awt.Component;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import com.floreantpos.config.ApplicationConfig;
import com.floreantpos.config.PrintConfig;
import com.floreantpos.print.PrinterType;
/**
*
* @author mshahriar
*/
public class PrintConfigurationView extends ConfigurationView {
/** Creates new form PrintConfiguration */
public PrintConfigurationView() {
initComponents();
}
@Override
public String getName() {
return "Print Configuration";
}
@Override
public void initialize() throws Exception {
PrinterType[] values = PrinterType.values();
cbReceiptPrinterType.setModel(new DefaultComboBoxModel(values));
cbKitchenPrinterType.setModel(new DefaultComboBoxModel(values));
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
cbReceiptPrinterName.setModel(new DefaultComboBoxModel(printServices));
cbKitchenPrinterName.setModel(new DefaultComboBoxModel(printServices));
PrintServiceComboRenderer comboRenderer = new PrintServiceComboRenderer();
cbReceiptPrinterName.setRenderer(comboRenderer);
cbKitchenPrinterName.setRenderer(comboRenderer);
cbReceiptPrinterType.setSelectedItem(PrinterType.fromString(ApplicationConfig.getString(PrintConfig.P_RECEIPT_PRINTER_TYPE, PrinterType.OS_PRINTER.getName())));
cbKitchenPrinterType.setSelectedItem(PrinterType.fromString(ApplicationConfig.getString(PrintConfig.P_KITCHEN_PRINTER_TYPE, PrinterType.OS_PRINTER.getName())));
tfReceiptPrinterName.setText(ApplicationConfig.getString(PrintConfig.P_JAVAPOS_PRINTER_FOR_RECEIPT, "POSPrinter"));
tfReceiptCashDrawerName.setText(ApplicationConfig.getString(PrintConfig.P_CASH_DRAWER_NAME, "CashDrawer"));
tfKitchenPrinterName.setText(ApplicationConfig.getString(PrintConfig.P_JAVAPOS_PRINTER_FOR_KITCHEN, "KitchenPrinter"));
setSelectedPrinter(cbReceiptPrinterName, PrintConfig.P_OS_PRINTER_FOR_RECEIPT);
setSelectedPrinter(cbKitchenPrinterName, PrintConfig.P_OS_PRINTER_FOR_KITCHEN);
chkPrintReceiptWhenTicketSettled.setSelected(ApplicationConfig.getBoolean(PrintConfig.P_PRINT_RECEIPT_WHEN_SETTELED, true));
chkPrintReceiptWhenTicketPaid.setSelected(ApplicationConfig.getBoolean(PrintConfig.P_PRINT_RECEIPT_WHEN_PAID, false));
chkPrintKitchenWhenTicketSettled.setSelected(ApplicationConfig.getBoolean(PrintConfig.P_PRINT_KITCHEN_WHEN_SETTELED, false));
chkPrintKitchenWhenTicketPaid.setSelected(ApplicationConfig.getBoolean(PrintConfig.P_PRINT_KITCHEN_WHEN_PAID, false));
setInitialized(true);
}
private void setSelectedPrinter(JComboBox whichPrinter, String propertyName) {
PrintService osDefaultPrinter = PrintServiceLookup.lookupDefaultPrintService();
String receiptPrinterName = ApplicationConfig.getString(propertyName, osDefaultPrinter.getName());
int printerCount = whichPrinter.getItemCount();
for(int i = 0; i < printerCount; i++) {
PrintService printService = (PrintService) whichPrinter.getItemAt(i);
if(printService.getName().equals(receiptPrinterName)) {
whichPrinter.setSelectedIndex(i);
return;
}
}
}
@Override
public boolean save() throws Exception {
ApplicationConfig.put(PrintConfig.P_RECEIPT_PRINTER_TYPE, cbReceiptPrinterType.getSelectedItem().toString());
ApplicationConfig.put(PrintConfig.P_KITCHEN_PRINTER_TYPE, cbKitchenPrinterType.getSelectedItem().toString());
PrintService printService = (PrintService) cbReceiptPrinterName.getSelectedItem();
ApplicationConfig.put(PrintConfig.P_OS_PRINTER_FOR_RECEIPT, printService == null ? null : printService.getName());
printService = (PrintService) cbKitchenPrinterName.getSelectedItem();
ApplicationConfig.put(PrintConfig.P_OS_PRINTER_FOR_KITCHEN, printService == null ? null : printService.getName());
ApplicationConfig.put(PrintConfig.P_JAVAPOS_PRINTER_FOR_RECEIPT, tfReceiptPrinterName.getText());
ApplicationConfig.put(PrintConfig.P_CASH_DRAWER_NAME, tfReceiptCashDrawerName.getText());
ApplicationConfig.put(PrintConfig.P_JAVAPOS_PRINTER_FOR_KITCHEN, tfKitchenPrinterName.getText());
ApplicationConfig.put(PrintConfig.P_PRINT_KITCHEN_WHEN_PAID, chkPrintKitchenWhenTicketPaid.isSelected());
ApplicationConfig.put(PrintConfig.P_PRINT_KITCHEN_WHEN_SETTELED, chkPrintKitchenWhenTicketSettled.isSelected());
ApplicationConfig.put(PrintConfig.P_PRINT_RECEIPT_WHEN_PAID, chkPrintReceiptWhenTicketPaid.isSelected());
ApplicationConfig.put(PrintConfig.P_PRINT_RECEIPT_WHEN_SETTELED, chkPrintReceiptWhenTicketSettled.isSelected());
return true;
}
private void setReceiptPrinterType(PrinterType printerType) {
switch (printerType) {
case OS_PRINTER:
lblReceiptPrinterName.setEnabled(true);
lblSelectReceiptPrinter.setEnabled(true);
cbReceiptPrinterName.setEnabled(true);
lblReceiptPrinterName.setEnabled(false);
tfReceiptPrinterName.setEnabled(false);
lblReceiptCashDrawerName.setEnabled(false);
tfReceiptCashDrawerName.setEnabled(false);
break;
case JAVAPOS:
lblReceiptPrinterName.setEnabled(false);
lblSelectReceiptPrinter.setEnabled(false);
cbReceiptPrinterName.setEnabled(false);
lblReceiptPrinterName.setEnabled(true);
tfReceiptPrinterName.setEnabled(true);
lblReceiptCashDrawerName.setEnabled(true);
tfReceiptCashDrawerName.setEnabled(true);
break;
}
}
private void setKitchenPrinterType(PrinterType printerType) {
switch (printerType) {
case OS_PRINTER:
lblKitchenPrinterName.setEnabled(true);
lblSelectKitchenPrinter.setEnabled(true);
cbKitchenPrinterName.setEnabled(true);
lblKitchenPrinterName.setEnabled(false);
tfKitchenPrinterName.setEnabled(false);
break;
case JAVAPOS:
lblKitchenPrinterName.setEnabled(false);
lblSelectKitchenPrinter.setEnabled(false);
cbKitchenPrinterName.setEnabled(false);
lblKitchenPrinterName.setEnabled(true);
tfKitchenPrinterName.setEnabled(true);
break;
}
}
private void receiptPrinterSelectionChanged(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_receiptPrinterSelectionChanged
setReceiptPrinterType((PrinterType) cbReceiptPrinterType.getSelectedItem());
}//GEN-LAST:event_receiptPrinterSelectionChanged
private void kitchenPrinterTypeSelectionChanged(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_kitchenPrinterTypeSelectionChanged
setKitchenPrinterType((PrinterType) cbKitchenPrinterType.getSelectedItem());
}//GEN-LAST:event_kitchenPrinterTypeSelectionChanged
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
chkPrintReceiptWhenTicketSettled = new javax.swing.JCheckBox();
chkPrintReceiptWhenTicketPaid = new javax.swing.JCheckBox();
chkPrintKitchenWhenTicketSettled = new javax.swing.JCheckBox();
chkPrintKitchenWhenTicketPaid = new javax.swing.JCheckBox();
jPanel1 = new javax.swing.JPanel();
lblReceiptCashDrawerName = new javax.swing.JLabel();
tfReceiptCashDrawerName = new javax.swing.JTextField();
lblReceiptPrinterName = new javax.swing.JLabel();
tfReceiptPrinterName = new javax.swing.JTextField();
cbReceiptPrinterName = new javax.swing.JComboBox();
cbReceiptPrinterType = new javax.swing.JComboBox();
javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
lblSelectReceiptPrinter = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
lblKitchenPrinterName = new javax.swing.JLabel();
tfKitchenPrinterName = new javax.swing.JTextField();
cbKitchenPrinterName = new javax.swing.JComboBox();
cbKitchenPrinterType = new javax.swing.JComboBox();
javax.swing.JLabel jLabel2 = new javax.swing.JLabel();
lblSelectKitchenPrinter = new javax.swing.JLabel();
chkPrintReceiptWhenTicketSettled.setText("Print receipt when ticket settled");
chkPrintReceiptWhenTicketPaid.setText("Print receipt when ticket paid");
chkPrintKitchenWhenTicketSettled.setText("Print to kitchen when ticket settled");
chkPrintKitchenWhenTicketPaid.setText("Print to kitchen when ticket paid");
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Receipt Printer", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.TOP));
lblReceiptCashDrawerName.setText("CashDrawer:");
tfReceiptCashDrawerName.setText("CashDrawer");
lblReceiptPrinterName.setText("Printer name:");
tfReceiptPrinterName.setText("PosPrinter");
cbReceiptPrinterType.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
receiptPrinterSelectionChanged(evt);
}
});
jLabel1.setText("Printer Type:");
lblSelectReceiptPrinter.setText("Select Printer:");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
.addComponent(lblReceiptPrinterName)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tfReceiptPrinterName))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbReceiptPrinterType, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lblSelectReceiptPrinter)
.addComponent(lblReceiptCashDrawerName))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tfReceiptCashDrawerName, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE)
.addComponent(cbReceiptPrinterName, 0, 178, Short.MAX_VALUE))
.addContainerGap())
);
jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, lblReceiptPrinterName});
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(cbReceiptPrinterType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblSelectReceiptPrinter)
.addComponent(cbReceiptPrinterName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblReceiptPrinterName)
.addComponent(tfReceiptPrinterName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblReceiptCashDrawerName)
.addComponent(tfReceiptCashDrawerName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Kitchen Printer", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.TOP));
lblKitchenPrinterName.setText("Printer name:");
tfKitchenPrinterName.setText("KitchenPrinter");
cbKitchenPrinterType.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
kitchenPrinterTypeSelectionChanged(evt);
}
});
jLabel2.setText("Printer Type:");
lblSelectKitchenPrinter.setText("Select Printer:");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel2Layout.createSequentialGroup()
.addComponent(lblKitchenPrinterName)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tfKitchenPrinterName))
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbKitchenPrinterType, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(18, 18, 18)
.addComponent(lblSelectKitchenPrinter)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbKitchenPrinterName, 0, 178, Short.MAX_VALUE)
.addContainerGap())
);
jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel2, lblKitchenPrinterName});
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(cbKitchenPrinterType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lblSelectKitchenPrinter)
.addComponent(cbKitchenPrinterName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lblKitchenPrinterName)
.addComponent(tfKitchenPrinterName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGap(102, 102, 102)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(chkPrintReceiptWhenTicketSettled)
.addComponent(chkPrintReceiptWhenTicketPaid)
.addComponent(chkPrintKitchenWhenTicketSettled)
.addComponent(chkPrintKitchenWhenTicketPaid))))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(chkPrintReceiptWhenTicketSettled)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(chkPrintReceiptWhenTicketPaid)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(chkPrintKitchenWhenTicketSettled)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(chkPrintKitchenWhenTicketPaid)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JComboBox cbKitchenPrinterName;
private javax.swing.JComboBox cbKitchenPrinterType;
private javax.swing.JComboBox cbReceiptPrinterName;
private javax.swing.JComboBox cbReceiptPrinterType;
private javax.swing.JCheckBox chkPrintKitchenWhenTicketPaid;
private javax.swing.JCheckBox chkPrintKitchenWhenTicketSettled;
private javax.swing.JCheckBox chkPrintReceiptWhenTicketPaid;
private javax.swing.JCheckBox chkPrintReceiptWhenTicketSettled;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JLabel lblKitchenPrinterName;
private javax.swing.JLabel lblReceiptCashDrawerName;
private javax.swing.JLabel lblReceiptPrinterName;
private javax.swing.JLabel lblSelectKitchenPrinter;
private javax.swing.JLabel lblSelectReceiptPrinter;
private javax.swing.JTextField tfKitchenPrinterName;
private javax.swing.JTextField tfReceiptCashDrawerName;
private javax.swing.JTextField tfReceiptPrinterName;
// End of variables declaration//GEN-END:variables
private class PrintServiceComboRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel listCellRendererComponent = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
listCellRendererComponent.setText(((PrintService) value).getName());
return listCellRendererComponent;
}
}
}